Sprawa wygląda tak. Na zającia na uczelni musimy przygotować w grupaach
przykładowy układzik do komunikacjia z portem równoległym. Jako, że nie mam
szczególnych zdolności pod tym względem, to lutowaniem itd zajął się
ktoś inny, ja natomiast dołączyłem do projektu, gdy weszło w gre
programowanie. Wszystko wydawało się dość trywialne, ale juz na początku
przerwania (rzecz się toczy w Dosie, a konkretnie tym dołączanym do
Win98) lpt o wyglądzie mniej więcej takim:
CONTROL=0x37A
static void interrupt lptriq() {
static word = 0x36;
word ^= LAMPKA;
outport(STATUS,word); //zapalaj i gas lampke na nacisniecie guzika
outport(0x20,0x20); //wyslij EndOfInterrupt do 8259
Przerwanie przechwycone setvect i niby wszystko powinno dzialać, a
jednak...nie działa. Tzn jeśli miedzy wywołaniem przerwania z urządzenie
wywołamy jakiś printf to wszystko jest cacy i dzia. Ale jesli mamy po
prostu for(;;); to przerwanie nie reaguje, tak jakby nie zerowal ISR.
Próbowaliśmy coś wymyślić przez pare godzin, ale nic ;(
Ponieważ układ musi być skonczony na srode to wziałem go do siebie.
Podłączam, uruchamiam programik...i wszystko jest ok, tzn przerwanie
reaguje zawsze, nawet przy for(;;);
I stąd moje pytanie: co muszę piętnować? Jakaś opcja w biosie czy coś
innego, bo naprawdę nie mam pomysłów co mogło nas tak zrobić w balona.